home *** CD-ROM | disk | FTP | other *** search
- unit Wizmain;
-
- interface
-
- uses
- SysUtils, Windows, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, ExtCtrls, Sprites, Spritebx, Buttons,
- StdCtrls, ComCtrls, FileCtrl, Convertr, Menus, DirNav,
- NewParse, HtmlTool;
-
- type
- TWizardMain = class(TForm)
- Panel1: TPanel;
- Panel2: TPanel;
- SpriteBox1: TSpriteBox;
- Sprite1: TSprite;
- Notebook1: TNotebook;
- Label2: TLabel;
- Label1: TLabel;
- ListBox1: TListBox;
- Label3: TLabel;
- Label12: TLabel;
- DirNavigator1: TDirNavigator;
- Image1: TImage;
- BitBtn4: TBitBtn;
- BitBtn5: TBitBtn;
- BitBtn6: TBitBtn;
- BitBtn7: TBitBtn;
- Edit1: TEdit;
- SpeedButton2: TSpeedButton;
- Label4: TLabel;
- Label11: TLabel;
- SpeedButton3: TSpeedButton;
- Label10: TLabel;
- ListBox3: TListBox;
- Memo1: TMemo;
- Edit2: TEdit;
- Label6: TLabel;
- BitBtn1: TBitBtn;
- SaveDialog1: TSaveDialog;
- procedure Navigator1BtnClick(Sender: TObject);
- procedure Notebook1PageChanged(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure DirNavigator1Recurse(Sender: TObject);
- procedure DirNavigator1BeforeNavigate(Sender: TObject);
- procedure DirNavigator1AfterNavigate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure SpeedButton2Click(Sender: TObject);
- procedure SpeedButton3Click(Sender: TObject);
- procedure BitBtn1Click(Sender: TObject);
- private
- { Private declarations }
- LogList: TStringList;
- procedure MoveFiles;
- procedure FixExternalLinks;
- public
- { Public declarations }
- procedure DoMoveFile(FromName, ToName: TFileName);
- procedure DoConvertFiles(FromName, ToName: TFileName; FromPath, ToPath: string);
- end;
-
- var
- WizardMain: TWizardMain;
-
- implementation
-
- {$R *.DFM}
-
- procedure TWizardMain.Navigator1BtnClick(Sender: TObject);
- begin
- case (Sender as TBitBtn).Tag of
- 0: NoteBook1.PageIndex := NoteBook1.PageIndex-1;
- 1: NoteBook1.PageIndex := NoteBook1.PageIndex+1;
- 2: ModalResult := mrOK;
- 3: ModalResult := mrCancel;
- end;
- end;
-
- procedure TWizardMain.Notebook1PageChanged(Sender: TObject);
- begin
- Sprite1.Enabled := false;
- Image1.Visible := true;
- case Notebook1.PageIndex of
- 2: begin
- Screen.Cursor := crHourGlass;
- try
- ListBox3.Clear;
- DirNavigator1.Navigate;
- finally
- Screen.Cursor := crDefault;
- end;
- end;
- 3: begin
- Screen.Cursor := crHourGlass;
- try
- MoveFiles;
- FixExternalLinks;
- Memo1.Lines.Clear;
- Memo1.Lines.Assign(LogList);
- BitBtn4.Enabled := false;
- BitBtn7.Enabled := false;
- finally
- Screen.Cursor := crDefault;
- end;
- end;
- 4: begin
- Sprite1.Enabled := true;
- Image1.Visible := false;
- BitBtn5.Enabled := false;
- BitBtn6.Enabled := true;
- end;
- end;
- end;
-
- procedure TWizardMain.FormCreate(Sender: TObject);
- begin
- BitBtn6.Enabled := false;
- Edit1.Text := GetCurrentDir;
- Edit2.Text := GetCurrentDir;
- LogList := TStringList.Create;
- end;
-
- procedure TWizardMain.FormDestroy(Sender: TObject);
- begin
- LogList.Free;
- end;
-
- procedure TWizardMain.FixExternalLinks;
- var
- i: integer;
- F: TextFile;
- begin
- for i := 0 to ListBox3.Items.Count-1 do
- begin
- SysUtils.DeleteFile(ChangeFileExt(ListBox3.Items[i], '.bak'));
- AssignFile(F, ListBox3.Items[i]);
- Rename(F, ChangeFileExt(ListBox3.Items[i], '.bak'));
- LogList.Add(Format('Created backup file %s',
- [ChangeFileExt(ListBox3.Items[i], '.bak')]));
- // source is the backup, dest is the original file
- // path to convert to abs is DirectoryListBox1.Directory
- // reference path is ListBox3.Items[i]
- DoConvertFiles(ChangeFileExt(ListBox3.Items[i], '.bak'),
- ListBox3.Items[i], Edit1.Text, ListBox3.Items[i]);
- end;
- MessageBeep(MB_OK);
- end;
-
- procedure TWizardMain.DoConvertFiles(FromName, ToName: TFileName; FromPath, ToPath: string);
- var
- Source, Dest: TFileStream;
- Corrector: THtmlFileCorrector;
- begin
- ChDir(ExtractFilePath(FromName));
- Source := TFileStream.Create(FromName, fmOpenRead);
- Dest := TFileStream.Create(ToName, fmCreate or fmOpenWrite);
- try
- Corrector := THtmlFileCorrector.CreateNew(Source, Dest);
- Corrector.OldLinks.Assign(Listbox1.Items);
- Corrector.SrcPath := FromPath;
- Corrector.DestPath := ToPath;
- try
- Corrector.Convert;
- LogList.Add(Format('Converted %s to %s', [FromName, ToName]));
- finally
- Corrector.Free;
- end;
- finally
- Source.Free;
- Dest.Free;
- end;
- end;
-
- procedure TWizardMain.DoMoveFile(FromName, ToName: TFileName);
- var
- Source, Dest: TFileStream;
- Mover: THtmlFileMover;
- begin
- ChDir(ExtractFilePath(FromName));
- Source := TFileStream.Create(FromName, fmOpenRead);
- Dest := TFileStream.Create(ToName, fmCreate or fmOpenWrite);
- try
- Mover := THtmlFileMover.CreateNew(Source, Dest);
- Mover.SrcPath := ExtractFilePath(FromName);
- Mover.DestPath := ExtractFilePath(ToName);
- Mover.NoChangeList.Assign(Listbox1.Items);
- try
- Mover.Convert;
- LogList.Add(Format('Moved %s to %s', [FromName, ToName]));
- finally
- Mover.Free;
- end;
- finally
- Source.Free;
- Dest.Free;
- end;
- SysUtils.DeleteFile(FromName);
- end;
-
- procedure TWizardMain.MoveFiles;
- var
- i: integer;
- begin
- for i := 0 to Listbox1.Items.Count-1 do
- begin
- if Edit1.Text[Length(Edit1.Text)] <> '\' then
- DoMoveFile(ListBox1.Items.Strings[i],
- Edit1.Text+'\'+ExtractFileName(ListBox1.Items.Strings[i]))
- else
- DoMoveFile(ListBox1.Items.Strings[i],
- Edit1.Text+ExtractFileName(ListBox1.Items.Strings[i]));
- end;
- BitBtn4.Enabled := false;
- BitBtn6.Enabled := true;
- MessageBeep(MB_OK);
- end;
-
- procedure TWizardMain.DirNavigator1Recurse(Sender: TObject);
- var
- LocalDir: String;
- Sr: TSearchRec;
- DosError: integer;
- AStream: TFileStream;
- Parser: THtmlParser;
-
- function InList(AName: string): boolean;
- var
- i: integer;
- begin
- Result := false;
- for i := 0 to ListBox1.Items.Count-1 do
- if Pos(uppercase(ExtractFileName(Listbox1.Items[i])), uppercase(AName)) <> 0 then
- begin
- Result := true;
- Exit;
- end;
- end;
-
- begin
- LocalDir := ExpandFileName('.');
- if LocalDir[Length(LocalDir)] <> '\' then
- LocalDir := LocalDir + '\';
- DosError := FindFirst('*.htm', faArchive, Sr);
- while DosError = 0 do with Sr do
- begin
- if not InList(Name) then // if not one of the files being moved then ...
- begin
- AStream := TFileStream.Create(LocalDir+Name, fmOpenRead);
- try
- Parser := THtmlParser.Create(AStream);
- try
- while (Parser.Token <> toEof) do
- begin
- if (((Pos('A HREF="', UpperCase(Parser.TokenString)) > 0)) and
- (not ((Pos('MAILTO', UpperCase(Parser.TokenString)) > 0) or
- (Pos('HTTP', UpperCase(Parser.TokenString)) > 0) or
- (Pos('NEWS', UpperCase(Parser.TokenString)) > 0)))) then
- begin
- if InList(Parser.TokenString) then // if reference is to one of the files being moved then...
- begin
- ListBox3.Items.Add(LocalDir+Name);
- Break;
- end;
- end;
- Parser.NextToken;
- Application.ProcessMessages;
- end;
- finally
- Parser.Free;
- end;
- finally
- AStream.Free;
- end;
- end;
- DosError := FindNext(Sr);
- end;
- SysUtils.FindClose(Sr);
- end;
-
- procedure TWizardMain.DirNavigator1BeforeNavigate(Sender: TObject);
- begin
- ChDir(Edit2.Text);
- end;
-
- procedure TWizardMain.DirNavigator1AfterNavigate(Sender: TObject);
- begin
- MessageBeep(MB_OK);
- end;
-
- procedure TWizardMain.SpeedButton2Click(Sender: TObject);
- var
- Dir: string;
- begin
- if SelectDirectory('Select Destination', '', Dir) then
- Edit1.Text := Dir;
- end;
-
- procedure TWizardMain.SpeedButton3Click(Sender: TObject);
- var
- Dir: string;
- begin
- if SelectDirectory('Select Destination', '', Dir) then
- Edit2.Text := Dir;
- end;
-
- procedure TWizardMain.BitBtn1Click(Sender: TObject);
- begin
- if SaveDialog1.Execute then
- Memo1.Lines.SaveToFile(SaveDialog1.FileName);
- end;
-
- end.
-